<?php

/**
 * Subclass for performing query and update operations on the 'turno' table.
 *
 *
 *
 * @package lib.model
 */
class TurnoPeer extends BaseTurnoPeer
{

  static public function getActuales($medico_id,$estudio_id){
    $c = new Criteria();
    if ($medico_id != "") {
      $c->add(self::MEDICO_ID,$medico_id);
    }
    if ($estudio_id != "") {
      $c->add(self::ESTUDIO_ID,$estudio_id);
    }
    return self::doSelect($c);
  }
  static public function getSqlTotalesPorDia($medico_id,$estudio_id){
    $sql = "SELECT
            (select count(*) from turno as tt
              where sobreturno=0 and tt.dia = t.dia";
           if ($medico_id != "")  $sql .= " and medico_id = $medico_id";
           if ($estudio_id != "")  $sql .= " and estudio_id = $estudio_id";
            $sql .= ") as turno,
            (select count(*) from turno as ts
              where sobreturno=1 and ts.dia = t.dia";
           if ($medico_id != "")  $sql .= " and medico_id = $medico_id";
           if ($estudio_id != "")  $sql .= " and estudio_id = $estudio_id";
            $sql .= ") as sobreturno,
            dia
            FROM `turno` as t group by dia";
    return $sql;
  }
  static public function getTurnoByMedicoFechaHora($medico_id,$fecha,$hora){
    $c = new Criteria();
    $c->add(self::MEDICO_ID,$medico_id);
    $c->add(self::ACTIVO,1);
    $c->add(self::SOBRETURNO,0);
    $c->add(self::DIA,"$fecha%",Criteria::LIKE);
    $c->add(self::INICIO,$hora,Criteria::LESS_EQUAL);
    $c->add(self::FIN,$hora,Criteria::GREATER_THAN);
    return self::doSelectOne($c);
  }
  static public function getSqlSobreturnosHora($medico_id,$fecha,$hora){
    $sql = "
      SELECT count(*) as cantidad
      FROM turno
      WHERE medico_id = $medico_id
        AND sobreturno = 1
        AND dia like '$fecha%'
        AND
        (
          (inicio like '$hora%')
          OR
          (fin like '$hora%')
        )
    ";
    return $sql;
  }
  static public function verificarTurnoLibre($medico_id,$fecha,$inicio,$fin){
    $turno = self::getTurnoByMedicoFechaHora($medico_id,$fecha,$inicio);
    if (! $turno) {
      $turno = self::getTurnoByMedicoFechaHora($medico_id,$fecha,$fin);
    }
    return $turno;
  }
  static public function verificarPosibleSobreturno($medico,$fecha,$inicio,$fin){
    $sql = self::getSqlSobreturnosHora($medico->getId(),$fecha,substr($inicio,0,2));
    $con = Propel::getConnection();
    $stmt = $con->prepareStatement($sql);
    $rs = $stmt->executeQuery();
    $cantidad = 0;
    while ($rs->next()){
      $cantidad = $rs->getInt("cantidad");
    }
    $posible = false;
    if ($cantidad <= $medico->getSobreturnos()) {
      $posible = true;
    }
    return $posible;
  }

  static public function getByFechaEstudioMedico($fecha,$hora,$estudio_id = false,$medico_id = false) {
    $sql = "
      Select id from turno as t
      where dia = '$fecha'  and
      inicio like '$hora%'
      ".(($estudio_id) ? " and estudio_id = $estudio_id" : "")."
      ".(($medico_id) ? " and medico_id = $medico_id" : "")."
      ORDER BY sobreturno, inicio
      ";
    echo $sql;
    $con = Propel::getConnection();
    $stmt = $con->prepareStatement($sql);
    $rs = $stmt->executeQuery();
    $turnos = array();
    while ($rs->next()){
      $turnos_id = $rs->getInt("id");
      $turnos[] = TurnoPeer::retrieveByPk($turno_id);
    }
    return  $turnos;
  }
}
